<?php
/**
 *  format.func.php 格式化函数库
 * 
 * @version    0.1
 * @author    Hyperblue   i@kushu.net
 * @pubdate    2011-08-25 13:50
 */
 
/**
 * 返回经addslashes处理过的字符串或数组
 *
 * @param   $string   需要处理的字符串或数组
 * @return   string/array
 */
function F_addslashes($string){
	if(!is_array($string)) return addslashes($string);
	foreach($string as $key => $val) $string[$key] = F_addslashes($val);
	return $string;
}

/**
 * 返回经stripslashes处理过的字符串或数组
 * @param $string 需要处理的字符串或数组
 * @return mixed
 */
function F_stripslashes($string) {
    if (!is_array($string))
        return stripslashes($string);
    foreach ($string as $key => $val)
        $string[$key] = F_stripslashes($val);
    return $string;
}

/**
 * 将一维数组奇偶下标的值组合成key/value，生成新的数组
 * array('a', 'b', 'c', 'd') => array('a'=>'b', 'c'=>'d')
 */
function F_array_value2key($array) {
	$new_array = array();
	if(!is_array($array) || !count($array)) return $new_array;
	$chunk_array = array_chunk($array, 2);
	if(count($chunk_array)) {
		foreach($chunk_array as $key => $value) {
			if (!preg_match('/^[a-z]([a-z0-9]*)$/', $value[0])) continue;
			$new_array[$value[0]] = isset($value[1]) ? F_addslashes(strip_tags($value[1])) : '';
		}
	}
	
	return $new_array;
}

/**
 * 将一维数组key转换成value，生成新的数组
 * array('a'=>'b', 'c'=>'d') => array('a', 'b', 'c', 'd')
 */
function F_array_key2value($array) {
	$new_array = array();
	if(!is_array($array) || !count($array)) return $new_array;
	
	foreach ($array as $key => $value) {
		if (!preg_match('/^[a-z]([a-z0-9]*)$/', $key)) continue;
		$new_array[] = $key;
		$new_array[] = F_addslashes(strip_tags($value));
	}
	
	return $new_array;
}

/**
 * 将字符串转换为数组
 *
 * @param	string	$data	字符串
 * @return	array	返回数组格式，如果，data为空，则返回空数组
 */
function F_string2array($data) {
    if ($data == '')
        return array();
    eval("\$array = $data;");
    return $array;
}

/**
 * 将数组转换为字符串
 *
 * @param	array	$data		数组
 * @param	bool	$isformdata	如果为0，则不使用new_stripslashes处理，可选参数，默认为1
 * @return	string	返回字符串，如果，data为空，则返回空
 */
function F_array2string($data, $isformdata = 1) {
    if ($data == '')
        return '';
    if ($isformdata)
        $data = F_stripslashes($data);
    return addslashes(var_export($data, TRUE));
}

/**
 * 对象转换为数组
 */
function F_object2array($stdclassobject) {
    $_array = is_object($stdclassobject) ? get_object_vars($stdclassobject) : $stdclassobject;

    foreach ((array) $_array as $key => $value) {
        $value = (is_array($value) || is_object($value)) ? F_object2array($value) : $value;
        $array[$key] = $value;
    }

    return $array;
}

/**
 * 将文本格式成适合js输出的字符串
 * @param string $string 需要处理的字符串
 * @param intval $isjs 是否执行字符串格式化，默认为执行
 * @return string 处理后的字符串
 */
function F_js($string, $isjs = 1) {
    $string = addslashes(str_replace(array("\r", "\n"), array('', ''), $string));
    return $isjs ? 'document.write("' . $string . '");' : $string;
}

/**
 * 转义 javascript 代码标记
 *
 * @param $str
 * @return mixed
 */
function F_script($str) {
    $str = preg_replace('/\<([\/]?)script([^\>]*?)\>/si', '&lt;\\1script\\2&gt;', $str);
    $str = preg_replace('/\<([\/]?)iframe([^\>]*?)\>/si', '&lt;\\1iframe\\2&gt;', $str);
    $str = preg_replace('/\<([\/]?)frame([^\>]*?)\>/si', '&lt;\\1frame\\2&gt;', $str);
    $str = preg_replace('/]]\>/si', ']] >', $str);
    return $str;
}

/**
 * 生成sql语句，如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
 * @param $data 条件数组或者字符串
 * @param $front 连接符
 * @param $in_column 字段名称
 * @return string
 */
function F_sqls($data, $front = ' AND ', $in_column = false) {
    if ($in_column && is_array($data)) {
        $ids = '\'' . implode('\',\'', $data) . '\'';
        $sql = "$in_column IN ($ids)";
        return $sql;
    } else {
        if ($front == '') {
            $front = ' AND ';
        }
        if (is_array($data) && count($data) > 0) {
            $sql = '';
            foreach ($data as $key => $val) {
                $sql .= $sql ? " $front $key = '$val' " : " $key = '$val' ";
            }
            return $sql;
        } else {
            return $data;
        }
    }
}